﻿using System;

namespace Framework.ManejoExcepciones
{
	public class ManejadorExcepciones
	{
		// Fields
		private string _sCapa;
		private string _sDatosRelacionados;
		private string _sEntidad;
		private string _sError;
		private string _sMetodo;
		private string _sPaso;

		// Methods
		public ManejadorExcepciones(object poObjetoInvoca, string psMetodo)
		{
			InicializarCampos();
			_sCapa = poObjetoInvoca.GetType().Namespace;
			_sEntidad = poObjetoInvoca.GetType().Name;
			_sMetodo = psMetodo;
		}

		private string GenerarDescripcion()
		{
			if (Error.IndexOf(Bandera) == -1)
			{
				string str = "Error=" + Error + ";";
				if (DatosRelacionados.Length > 0)
				{
					str = str + " Datos=(" + DatosRelacionados + "); ";
				}
				string str2 = str;
				return (str2 + Bandera + " Seguimiento: C=" + Capa + ";E=" + Entidad + ";M=" + Metodo + ";P=" + Paso + ";");
			}
			return (Error + @"\C=" + Capa + ";E=" + Entidad + ";M=" + Metodo + ";P=" + Paso + ";");
		}

		public string GenerarDescripcionExcepcion(string psPaso, string psError, string psDatosRelacionados)
		{
			_sPaso = psPaso;
			_sDatosRelacionados = psDatosRelacionados;
			if (Error.IndexOf(psError) == -1)
			{
				_sError = psError;
				return GenerarDescripcion();
			}
			return psError;
		}

		private void InicializarCampos()
		{
			_sCapa = "";
			_sEntidad = "";
			_sMetodo = "";
			_sPaso = "";
			_sError = "";
			_sDatosRelacionados = "";
		}

		public void LanzarExcepcion(string psPaso, string psError)
		{
			string str;
			_sPaso = psPaso;
			if ((psError.IndexOf(Error) == -1) || (Error.Length == 0))
			{
				_sError = psError;
				str = GenerarDescripcion();
			}
			else
			{
				str = psError;
			}
			throw new Exception(str);
		}

		public void LanzarExcepcion(string psPaso, string psError, string psDatosRelacionados)
		{
			string str;
			_sPaso = psPaso;
			_sDatosRelacionados = psDatosRelacionados;
			if ((psError.IndexOf(Error) == -1) || (Error.Length == 0))
			{
				_sError = psError;
				str = GenerarDescripcion();
			}
			else
			{
				str = psError;
			}
			throw new Exception(str);
		}

		// Properties
		private string Bandera
		{
			get
			{
				return "BS-070122;";
			}
		}

		private string Capa
		{
			get
			{
				return _sCapa;
			}
		}

		private string DatosRelacionados
		{
			get
			{
				return _sDatosRelacionados;
			}
		}

		private string Entidad
		{
			get
			{
				return _sEntidad;
			}
		}

		private string Error
		{
			get
			{
				return _sError;
			}
		}

		private string Metodo
		{
			get
			{
				return _sMetodo;
			}
		}

		private string Paso
		{
			get
			{
				return _sPaso;
			}
		}
	}
}